#pragma once
#include <iostream>
#include <stdarg.h>
#include <string>

namespace cutt{
	typedef std::wstring String;
}


class Log
{
public:
	Log(void);
	~Log(void);
};


#define  LOG 0


#define LOG_TRACE(format_string,...)
#define LOG_DEBUG(format_string,...)
#define LOG_INFO(format_string,...)
#define LOG_WARNING(format_string,...)
#define LOG_ERROR(format_string,...)
#define LOG_FATAL(format_string,...)

#if LOG < 1
	#undef LOG_TRACE
	#define LOG_TRACE(format_string,...) \
	printf("TRACE	"format_string"    [%s : %s @ %d - %ld]\n", __VA_ARGS__,__FILE__,__FUNCTION__,__LINE__,GetCurrentThreadId())
#endif

#if LOG < 2
	#undef LOG_DEBUG
	#define LOG_DEBUG(format_string,...) \
	printf("DEBUG	"format_string"    [%s : %s @ %d - %ld]\n", __VA_ARGS__,__FILE__,__FUNCTION__,__LINE__,GetCurrentThreadId())
#endif

#if LOG < 3
	#undef LOG_INFO
	#define LOG_INFO(format_string,...) \
	printf("INFO	"format_string"    [%s : %s @ %d - %ld]\n", __VA_ARGS__,__FILE__,__FUNCTION__,__LINE__,GetCurrentThreadId())
#endif

#if LOG < 4
	#undef LOG_WARNING
	#define LOG_WARNING(format_string,...) \
	printf("WARN	"format_string"    [%s : %s @ %d - %ld]\n", __VA_ARGS__,__FILE__,__FUNCTION__,__LINE__,GetCurrentThreadId())
#endif

#if LOG < 6
	#undef LOG_ERROR
	#define LOG_ERROR(format_string,...) \
	printf("ERROR	"format_string"    [%s : %s @ %d - %ld]\n", __VA_ARGS__,__FILE__,__FUNCTION__,__LINE__,GetCurrentThreadId())
#endif

#if LOG < 7
	#undef LOG_FATAL
	#define LOG_FATAL(format_string,...) \
	printf("FATAL	"format_string"    [%s : %s @ %d - %ld]\n", __VA_ARGS__,__FILE__,__FUNCTION__,__LINE__,GetCurrentThreadId())
#endif